<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
    </head>
    <body>
        <script>
            /*
            思路：用最少的跳跃次数跳到数组最后一个位置，而且必定能跳到
            依然是将跳跃转化为范围，但是要考虑何时步数才加1呢
            */
            var jump = function (nums) {
                if (nums.length <= 1) return 0
                let ans = 0 //记录步数
                let curDistance = 0 //当前可到达的最大位置
                let nextDistance = 0 //可覆盖的最大位置
                //遍历整个nums，来找出最少的跳跃次数
                for (let i = 0; i < nums.length; i++) {
                    //跟跳跃游戏1一样，找出当前可跳跃的最大范围
                    nextDistance = Math.max(nums[i] + i, nextDistance)
                    if (i == curDistance) {
                        //到了最大位置,加一步，这样下一个范围是可到达的
                        ans++
                        curDistance = nextDistance
                        if (nextDistance >= nums.length - 1) break
                    }
                }
                return ans
            }
        </script>
    </body>
</html>
